USE [SI2Final]

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF OBJECT_ID(N'[dbo].[spMarcarConsulta]', N'P') IS NOT NULL
    DROP procedure [dbo].spMarcarConsulta;
GO
CREATE PROCEDURE spMarcarConsulta
	@paciente int,
	@medico nvarchar(20),
	@especialidade int,
	@data date,
	@motivo int,
	@res int output
AS
BEGIN
	SET NOCOUNT ON;
	set xact_abort on;
	set transaction isolation level serializable
	
BEGIN TRAN	
	declare @nrConsultas int
	declare @nrConsultasEspera int
	declare @s int
	
	select @nrConsultas=COUNT(*) from Consulta where Data=@data and IdMedico=@medico and IdEspecialidade=@especialidade
	select @nrConsultasEspera=COUNT(*) from ConsultaEmEspera where Data=@data and IdMedico=@medico and IdEspecialidade=@especialidade
	
	if (select Medico.NumeroPacientesDiario from Medico where Medico.LicencaMedica=@medico)<=@nrConsultas and @nrConsultasEspera< (select Medico.NumeroListadeEspera from Medico where Medico.LicencaMedica=@medico)
		begin
			INSERT into ConsultaEmEspera(IdMotivoConsulta,Data,DataRegisto,IdMedico,IdPaciente,IdEspecialidade)
				values (@motivo,@data,GETDATE(),@medico,@paciente,@especialidade);
			set @res = 1;			
			
		end
	else if @nrConsultas < (select Medico.NumeroPacientesDiario from Medico where Medico.LicencaMedica=@medico)
		begin
			INSERT into Consulta(IdMotivoConsulta,Data,DataRegisto,IdMedico,IdPaciente,IdEspecialidade)
				values (@motivo,@data,GETDATE(),@medico,@paciente,@especialidade);
			set @res = 0;		
		end
	else
		begin
			set @res = -1;
		end
COMMIT TRANSACTION

END
GO
